package com.niit.cms.dao;

import com.niit.cms.entity.Course;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * (Course)表数据库访问层
 *
 * @author makejava
 * @since 2022-06-22 21:42:50
 */
public interface CourseDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Course queryById(Integer id);

    /**
     * 按条件查询数据
     *
     * @param course   查询条件
     *
     * @return 对象列表
     */
    List<Course> queryListByCourse(@Param("course") Course course);
    /**
     * 按条件查询指定行数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @Param limitSize 查询范围
     * @return 对象列表
     */
    List<Course> queryOrderedListByCourseLimit(@Param("course") Course course, @Param("sort") String sort, @Param("limitSize") Integer limitSize);

    /**
     * 按条件查询数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @return 对象列表
     */
    List<Course> queryOrderedListByCourse(@Param("course") Course course, @Param("sort") String sort);

    /**
     * 查询指定行数据
     *
     * @param course   查询条件
     * @param pageable 分页对象
     * @return 对象列表
     */
    List<Course> queryAllByLimit(Course course, @Param("pageable") Pageable pageable);

    /**
     * 统计总行数
     *
     * @param course 查询条件
     * @return 总行数
     */
    long count(Course course);


    /**
     * 按分类查询指定行数据并排序
     *
     *@Param limitSize 查询范围
     * @param sort 排序条件
     * @param type 分类
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByTypeLimit(@Param("classId") Integer type, @Param("sort") String sort, @Param("limitSize") Integer limitSize);
    /**
     * 按父分类查询全部数据
     *
     *@Param course
     * @return 对象列表
     *
     */
    List<Course> queryListByParentType(@Param("course") Course course);
    /**
     * 按父分类查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByParentType(@Param("course") Course course, @Param("sort") String sort);
    /**
     * 按关键词查询全部数据
     *
     *@Param keyword
     * @return 对象列表
     *
     */
    List<Course> queryListByKeyword(String keyword);
    /**
     * 按条件和关键词查询数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @param keyword 关键词
     * @return 对象列表
     */
    List<Course> queryOrderedListByCourseKeyword(@Param("course") Course course, @Param("sort") String sort, @Param("keyword") String keyword);
    /**
     * 按父分类和关键词查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @param keyword
     * @return 对象列表
     *
     */
    List<Course> queryOrderedListByParentTypeKeyword(@Param("course") Course course, @Param("sort") String sort, @Param("keyword") String keyword);
    /**
     * 按条件和关键词查询数据
     *
     * @param course   查询条件
     * @param  keyword
     * @return 对象列表
     */
    List<Course> queryListByCourseKeyword(@Param("course") Course course, @Param("keyword") String keyword);
    /**
     * 按父分类和关键词查询全部数据
     *
     *@Param course
     * @param keyword
     * @return 对象列表
     *
     */
    List<Course> queryListByParentTypeKeyword(@Param("course") Course course, @Param("keyword") String keyword);
    /**
     * 修改数据
     *
     * @param course
     *
     */
    int update(@Param("course") Course course);
}

